package com.irdstudio.efp.limit.service.dao;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.irdstudio.basic.framework.core.bean.SedSynCusManageVO;
import com.irdstudio.efp.limit.service.domain.LmtPrdCont;
import org.apache.ibatis.annotations.Param;

import com.irdstudio.basic.framework.core.base.DataOptionalAuthorityDao;
import com.irdstudio.efp.limit.service.domain.LmtPrdCont;
import com.irdstudio.efp.limit.service.vo.LmtPrdContVO;

/**
 * <p>DAO interface:授信协议表				<p>
 *
 * @author chenqm1
 * @date 2018-05-09
 */
public interface LmtPrdContDao extends DataOptionalAuthorityDao {

	/**
	 * 产品协议表插入记录
	 *
	 * @param inLmtPrdContVo
	 * @return
	 */
	public int insertLmtPrdCont(LmtPrdCont lmtPrdCont);

	public int deleteByPk(LmtPrdCont lmtPrdCont);

	public int updateByPk(LmtPrdCont lmtPrdCont);

	public LmtPrdCont queryByPk(LmtPrdCont lmtPrdCont);

	public List<LmtPrdCont> queryAllOwnerByPage(LmtPrdContVO lmtPrdCont);

	public List<LmtPrdCont> queryAllCurrOrgByPage(LmtPrdContVO lmtPrdCont);

	public List<LmtPrdCont> queryAllCurrDownOrgByPage(LmtPrdContVO lmtPrdCont);

	public List<LmtPrdCont> queryAllCurrOwnerPrdByPage(LmtPrdContVO lmtPrdCont);


	/**
	 * 额度激活进度查询
	 *
	 * @param lmtPrdContVO
	 * @return
	 */
	public List<LmtPrdCont> queryPrdContProcess(@Param("lmtPrdContVO") LmtPrdContVO lmtPrdContVO, @Param("approveStatusArr") String[] approveStatusArr);

	/**
	 * 更新产品协议状态
	 *
	 * @param lmtPrelist
	 * @return
	 */
	public int updatePrdContStatus(LmtPrdCont lmtPrdCont);

	/**
	 * 获取最近一次被拒时间
	 *
	 * @param lmtPrdCont
	 * @return
	 */
	public String getLatestRejectDate(LmtPrdCont lmtPrdCont);

	/**
	 * 查询在途申请记录数
	 *
	 * @param lmtPrdCont
	 * @return
	 */
	public int queryProcessingCount(LmtPrdCont lmtPrdCont);

	/**
	 * 分批获取lmt_prd_cont表里的数据信息
	 *
	 * @return
	 */
	public List<LmtPrdCont> queryAllPrdContInTurn(int start, int batchNum);

	/**
	 * 获取额度信息表总数
	 *
	 * @param lmtPrdCont
	 * @return
	 */
	public int queryLmtPrdAllCount(LmtPrdCont lmtPrdCont);

	/**
	 * 查询授信协议状态的总数
	 *
	 * @param lmtContNo 授信协议编号
	 * @param status    授信协议状态, '1', '2'
	 * @return
	 */
	public int queryLmtPrdCountByStatus(@Param("lmtContNo") String lmtContNo,
										@Param("status") String status);

	/**
	 * 获取对应起始日期表数据条数
	 *
	 * @param lpc
	 * @return
	 */
	public int queryLmtPrdCountCount(LmtPrdCont lpc);

	/**
	 * 根据条件查询授信协议集合信息
	 *
	 * @param map
	 * @return
	 */
	public List<LmtPrdCont> queryListByStartDateAndLimit(Map<String, Object> map);

	/**
	 * 查询当前法人机构下的授信协议列表
	 *
	 * @param lmtPrdCont
	 * @return
	 */
	public List<LmtPrdCont> queryLmtPrdContsByLegalByPage(LmtPrdContVO lmtPrdCont);

	/**
	 * 查询当前法人机构下的可终止的授信协议列表
	 *
	 * @param lmtPrdCont
	 * @return
	 */
	public List<LmtPrdCont> queryLmtPrdContsForTerByLegalByPage(LmtPrdContVO lmtPrdCont);


	/**
	 * 根据对象查询所有数据，不分页
	 *
	 * @param lmtPrdCont
	 * @return
	 */
	public List<LmtPrdCont> queryLmtPrdList(LmtPrdContVO lmtPrdCont);

	/**
	 * 获取客户未结清额度
	 *
	 * @param lmtPrdCont
	 * @return
	 */
	public BigDecimal getCusUnSettleLmtAmount(LmtPrdContVO lmtPrdContVo);

	/**
	 * 通过渠道编号、产品编号、身份证号、系统当前日期查询授信协议信息
	 *
	 * @author qiuyf
	 * @version 0.1 初始为0.1,后续变更则修改
	 * @since 2019年3月13日 上午10:04:27
	 */
	public LmtPrdCont qryLmtPrdContByCondition(LmtPrdCont lmtPrdCont);

	/**
	 * 失效 超过授信协议到期的记录
	 * <p>
	 * 0.1:caoxin:2019/3/22 8:44: 失效 超过授信协议到期的记录
	 *
	 * @return
	 * @author caoxin
	 * @date 2019/3/22 8:44
	 * @version 0.1
	 * @since 2019/3/22 8:44
	 */
	public int inValidLmtProContOverExpireDate(@Param("openDay") String openDay);

	/**
	 * 需求编号：【2019D0519】（业务提的需求编号）
	 * 问题编号：【xxxxxxx】（若不是因为修复问题而新增该类，则留空）
	 * 开发人员：qiuyf
	 * 创建日期：2019年4月23日 下午7:29:16
	 * 功能描述：通过授信申请流水号查询信息
	 */
	public LmtPrdCont qryLmtPrdContByLmtApplySeq(String lmtApplySeq);

	/**
	 * 同步额度信息表有数据则更新，无则新增 <br>
	 * 0.1:ludayong:2019年5月10日 下午3:35:56:新增 <br>
	 *
	 * @author ludayong
	 * @date 2019年5月10日 下午3:35:56
	 * @version 0.1
	 * @since 2019年5月10日 下午3:35:56
	 */
	public int batchInsertLmtPrdCont(List<LmtPrdCont> lmtPrdContList);

	/**
	 * 批量新增额度信息前，根据授信申请流水号删除额度信息 <br>
	 * 0.1:ludayong:2019年5月11日 下午4:45:16:新增 <br>
	 *
	 * @author ludayong
	 * @date 2019年5月11日 下午4:45:16
	 * @version 0.1
	 * @since 2019年5月11日 下午4:45:16
	 */
	public int batchDeleteLmtPrdContByLmtApplySeq(@Param("lmtPrdContList") List<LmtPrdCont> lmtPrdContList);

	/**
	 * TODO <br>
	 * 0.1:wanglihua:2019年4月19日 上午11:09:55:TODO <br>
	 *
	 * @author wanglihua
	 * @date 2019年4月19日 上午11:09:55
	 * @version 0.1 初始为0.1,后续变更则修改
	 * @since 2019年4月19日 上午11:09:55
	 */
	public LmtPrdCont queryContractEle(LmtPrdCont lmtPrdCont);

	/**
	 * TODO 个人额度查询<br>
	 *
	 * @author wanglihua
	 * @date 2019年4月24日 上午9:51:39
	 * @version 0.1
	 * @since 2019年4月24日 上午9:51:39
	 */
	public LmtPrdCont queryOneQuota(LmtPrdCont LmtPrdCont);

	/**
	 * TODO 个人额度查询<br>
	 *
	 * @param btchLmtStCd
	 * @author wanglihua
	 * @date 2019年4月24日 上午9:51:39
	 * @version 0.1
	 * @since 2019年4月24日 上午9:51:39
	 */
	public List<LmtPrdCont> queryOneCus(@Param("lmtPrdCont") LmtPrdCont lmtPrdCont, @Param("btchLmtStCd") String[] btchLmtStCd);

	/**
	 * 需求编号：【2019D0519】（业务提的需求编号）
	 * 问题编号：【xxxxxxx】（若不是因为修复问题而新增该类，则留空）
	 * 开发人员：qiuyf
	 * 创建日期：2019年5月22日 上午8:39:39
	 * 功能描述：通过证件类型、证件号码查询信息
	 */
	public List<LmtPrdCont> qryLmtPrdContByCust(LmtPrdCont lmtPrdCont);

	public int batchUpdateCusManage(@Param(value = "sedSynCusManageVO") List<SedSynCusManageVO> sedSynCusManageVO);

	/**
	 * 需求编号:2019D0910
	 * 问题编号:
	 * 开发人员: caoxin
	 * 创建日期:2019/8/14
	 * 功能描述:
	 * 修改日期:2019/8/14
	 * 修改描述:
	 */
	int countLmtProContByCertTypeAndCertNo(@Param("certType") String certType, @Param("certNo") String certNo);

	/**
	 * 根据证件号码和证件类型查询授信协议表
	 *
	 * @author xiezw
	 */
	public List<LmtPrdCont> queryAllLmtPrdCont(LmtPrdCont lmtPrdCont);

	/**
	 * 根据授信申请流水号
	 *
	 * @param list
	 * @return
	 */
	List<LmtPrdCont> queryByLmtSeqs(@Param("list") List<String> list);

	List<LmtPrdCont> aplcOCMExstdCrLmt(LmtPrdCont lmtPrdCont);

    int updateLmtStatus(@Param("lmtStatus") String lmtStatus, @Param("lmtContNo") String lmtContNo);
}
